package com.digicom.service.comment;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.digicom.common.entity.Comment;

import java.util.List;

/**
 * 评论服务接口
 */
public interface CommentService extends IService<Comment> {
    /**
     * 添加评论
     *
     * @param comment 评论信息
     * @return 评论ID
     */
    Long addComment(Comment comment);

    /**
     * 回复评论
     *
     * @param comment 评论信息
     * @return 评论ID
     */
    Long replyComment(Comment comment);

    /**
     * 审核评论
     *
     * @param commentId 评论ID
     * @param status 状态（1-通过，2-拒绝）
     * @param reviewBy 审核人
     * @param reviewRemark 审核备注
     * @return 结果
     */
    boolean reviewComment(Long commentId, String status, String reviewBy, String reviewRemark);

    /**
     * 自动审核评论
     *
     * @param commentId 评论ID
     * @return 结果
     */
    boolean autoReviewComment(Long commentId);

    /**
     * 删除评论
     *
     * @param commentId 评论ID
     * @param userId 操作用户ID（用于权限校验）
     * @return 操作结果
     */
    boolean deleteComment(Long commentId, Long userId);

    /**
     * 批量删除评论
     *
     * @param commentIds 评论ID数组
     * @return 结果
     */
    boolean deleteComments(Long[] commentIds);

    /**
     * 查询文章的评论列表（分页）
     *
     * @param articleId 文章ID
     * @param page 分页对象
     * @return 分页结果
     */
    Page<Comment> listArticleComments(Long articleId, Page<Comment> page);

    /**
     * 查询待审核的评论列表（分页）
     *
     * @param page 分页对象
     * @return 分页结果
     */
    Page<Comment> listPendingComments(Page<Comment> page);

    /**
     * 将评论数据同步到APP
     *
     * @param commentId 评论ID
     * @return 结果
     */
    boolean syncCommentToApp(Long commentId);

    /**
     * 获取用户评论列表（分页）
     *
     * @param userId 用户ID
     * @param page 分页对象
     * @return 分页结果
     */
    Page<Comment> listUserComments(Long userId, Page<Comment> page);

    /**
     * 查询文章评论列表
     * @param articleId 文章ID
     * @param page 分页参数
     * @return 评论分页列表
     */
    Page<Comment> listCommentsByArticle(Long articleId, Page<Comment> page);

    /**
     * 查询用户评论列表
     * @param userId 用户ID
     * @param page 分页参数
     * @return 评论分页列表
     */
    Page<Comment> listCommentsByUser(Long userId, Page<Comment> page);

    /**
     * 获取某个评论的所有回复
     * @param commentId 评论ID
     * @return 回复列表
     */
    List<Comment> listReplies(Long commentId);

    /**
     * 对评论进行审核
     * @param commentId 评论ID
     * @param status 审核状态
     * @param reviewBy 审核人
     * @param reviewRemark 审核不通过原因
     * @return 操作结果
     */
    boolean auditComment(Long commentId, String status, String reviewBy, String reviewRemark);

    /**
     * 统计文章评论数量
     * @param articleId 文章ID
     * @return 评论数量
     */
    int countArticleComments(Long articleId);
} 